package solution;

import java.util.Arrays;

/**
 * 给你一个字符串 s 和一个字符 c ，且 c 是 s 中出现过的字符。
 *
 * 返回一个整数数组 answer ，其中 answer.length == s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。
 *
 * 两个下标 i 和 j 之间的 距离 为 abs(i - j) ，其中 abs 是绝对值函数。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/shortest-distance-to-a-character
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Solution821 {

    public int[] shortestToChar(String s, char c) {
        char[] charArray = s.toCharArray();
        int[] ans = new int[charArray.length];
        Arrays.fill(ans, Integer.MAX_VALUE);

        int startIndex = - 1;
        for (int i = 0; i < charArray.length; i++) {
            if (charArray[i] == c) {
                ans[i] = 0;
                // left
                for (int j = i - 1; j > startIndex; j --) {
                    ans[j] = Math.min(ans[j], i - j );
                }
                // right
                for (int j = i + 1; j < ans.length && charArray[j] != c; j++) {
                    ans[j] = Math.min(ans[j], j - i);
                }
                startIndex = i;
            }
        }
        return ans;
    }
}
